package prvydevj;

import javax.swing.table.AbstractTableModel;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


/**
 * Table model pro tabulku zobrazující jednotlivé položky na faktuře.
 * User: marpies
 * Date: 5/4/13
 * Time: 2:28 PM
 * To change this template use File | Settings | File Templates.
 */
public class InvoiceItemTableModel extends AbstractTableModel {

    private List<InvoiceItem> records;

    /**
     * Vytvoří model pro tabulku faktur.
     */
    public InvoiceItemTableModel() {
        records = new ArrayList<InvoiceItem>();
    }

    /**
     * Přidání položky do tabulky.
     * @param invoiceItem Položka faktury, která má být přidána
     */
    public void add( InvoiceItem invoiceItem ) {
        records.add(invoiceItem);
        int lastRow = records.size() - 1;
        fireTableRowsInserted(lastRow, lastRow);
    }

    /**
     * Vrací počet řádků v tabulce.
     * @return počet řádků
     */
    @Override
    public int getRowCount() {
        return records.size();
    }

    /**
     * Vrací počet sloupců v tabulce.
     * @return počet sloupců
     */
    @Override
    public int getColumnCount() {
        return 3;
    }

    /**
     * Vrací hodnotu z tabulky nacházející se na daném indexu řádku a sloupce
     * @param rowIndex index řádku
     * @param columnIndex index sloupce
     * @return hodnota tabulky v daném řádku a sloupci
     * @throws IllegalArgumentException index sloupce je mimo rozsah
     */
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        InvoiceItem invoiceItem = records.get(rowIndex);
        switch (columnIndex) {
            case 0:
                return invoiceItem.getNazev();
            case 1:
                return invoiceItem.getKs();
            case 2:
                return invoiceItem.getCena();
            default:
                throw new IllegalArgumentException("columnIndex");
        }
    }

    /**
     * Vrací název sloupce podle indexu
     * @param column index sloupce
     * @return název sloupce
     * @throws IllegalArgumentException index sloupce je mimo rozsah
     */
    @Override
    public String getColumnName(int column) {
        switch (column) {
            case 0:
                return "Popis";
            case 1:
                return "Počet";
            case 2:
                return "Jednotková cena";
            default:
                throw new IllegalArgumentException("column");
        }
    }

    /**
     * Datový typ reprezentující hodnoty v daném sloupci
     * @param columnIndex index sloupce
     * @return datový typ sloupce
     * @throws IllegalArgumentException index sloupce je mimo rozsah
     */
    @Override
    public Class<?> getColumnClass(int columnIndex) {
        switch (columnIndex) {
            case 0:
                return String.class;
            case 1:
                return Integer.class;
            case 2:
                return BigDecimal.class;
            default:
                throw new IllegalArgumentException("columnIndex");
        }
    }

    /**
     * Vrací nemodifikovatelnou kolekci všch záznamů v tabulce
     * @return kolekce záznamů
     */
    public List<InvoiceItem> getRecords()
    {
        return Collections.unmodifiableList(records);
    }

    /**
     * Vymaže všechny záznamy
     */
    public void clear() {
        records.clear();
    }
}
